package edu.zut.oop;

/**
 * 类：模型
 * 属性 + 行为（方法）
 * 注意：方法是非静态的
 * 权限修饰符： public  default(默认不写)
 * 最终修饰符：final
 * 抽象修饰符：abstract
 * [修饰符] class 类名{
 * 属性1;
 * 属性2;
 * 方法1;
 * 方法2;
 * }
 * 属性：全局变量(不用赋值，有默认值)  格式： [修饰符] 数据类型  属性名;
 * 方法：非静态方法
 * 属性以及方法属于对象的成员
 * 自定的类属于数据类型，引用数据类型
 */
public class Student {

    String name;
    String num;
    int age;

    /**
     * 每一个类都有一个默认的无参构造方法,它是由JVM自动提供的（当用户没有手动提供时），
     * 实际中，我们可以通过手动定义构造方法，完成一些 初始化工作(属性初始化)
     * 构造方法 充分利用重载
     */
    public Student(){
        System.out.println("student的无参构造执行");
    }

    /**
     * 自定义一个有参构造,完成属性的初始化工作
     * @param n 表示name
     * @param m 表示num
     * @param a 表示age
     */
    public Student(String n,String m,int a){
        name = n;
        num = m;
        age = a;
    }


    /**
     * 用于对属性进行赋值
     *
     * @param a 表示姓名
     * @param b 表示学号
     * @param c 表示年龄
     */
    public void assign(String a, String b, int c) {
        name = a;
        num = b;
        age = c;
    }


    public void study() {
        System.out.println(name + "正在学习");
    }

    public void sleep() {
        System.out.println(name + "睡着了");
    }

    public void introduce() {
        System.out.println("我叫" + name + ",今年" + age + "岁,学号是" + num);
        study();
    }


    public static void main(String[] args) {
        //表示一个具体的学生
        Student stu;   //声明一个Student类型的对象叫stu
        stu = new Student();  //通过关键字new在内存中开辟空间保存对象
        stu.introduce();
        //属性的调用   对象名.属性名
        stu.name = "张三";
        stu.age = 20;
        stu.num = "2021001";
        //方法的调用   对象名.方法名(参数.....);
        stu.introduce();
        stu.study();
        stu.sleep();

        //利用有参构造完成对象的创建
        Student student2 = new Student("李四","2020110",20);
        student2.introduce();
    }

}
